import smtplib
import uuid
import redis
from email.header import Header
from email.mime.text import MIMEText
from LaboratoryBuilding.settings import REDIS_HOST, REDIS_PORT, EMAIL_COME_FROM, EMAIL_PASSWORD, EMAIL_SMTP_SERVER
from apis.celery_pro.celery import app
# app.autodiscover_tasks(['send_mail','tasks'])

# 建立连接
r = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)

@app.task
#发送邮件的包
#flag是一个唯一标识
def send_mail(to_email,username,uid):
    '''
    :param to_email:接收方的邮箱
    :param infos: 发送的邮箱信息，文本形式
    :return: 返回发送成功
    '''
    # come_from 是自己的邮箱，password是邮箱的授权码
    # 使用缓存 保存用户Id  保证 激活邮件有效期是 3600*24
    flag = uuid.uuid1().hex  # 生成了一个唯一的标识字符串
    r.set(flag,uid,3600 * 24)
    come_from = EMAIL_COME_FROM  # who 用户是谁 ，相当于用户名。
    password = EMAIL_PASSWORD  # 秘钥串 ，相当于密码。
    # to_email 是接收的邮箱
    # to_email = to_email
    # to_email = '2249930034@qq.com' # 我要发送给谁
    # 邮件服务器
    smtp_server = EMAIL_SMTP_SERVER  # 我们自己不搭建了，有免费的还稳定，出了事情都能找服务商， QQ邮箱的服务域名
    # infos = "hello,董老师. I am 韩磊."  # 我们要发送的内容
    # 邮箱正文，第一个参数为内容，第二个参数为格式，默认为纯文本，第三个参数是编码
    # 这里我用把发送内容赋值给变量infos
    # msg = MIMEText(infos, 'plain', 'utf-8')
    #fhttps://cloud.tencent.com/developer/article/1445126
    msg = MIMEText('<html><body><h1>%s,实验楼欢迎你，点击以下链接激活账户</h1>'%username +
         '<p><a href="http://127.0.0.1:8000/apis/active?flag=%s">请激活按钮</a></p>'%flag +'<p>http://127.0.0.1:8000/apis/active?flag=%s<p>'%flag+
         '</body></html>', 'html', 'utf-8')
    # 邮件头部信息
    msg['From'] = Header(come_from)
    # 发送给谁
    msg['To'] = Header(to_email)
    # 邮件主题
    msg['Subject'] = Header('实验楼欢迎你，你需要验证激活账户')
    # 创建实例
    server = smtplib.SMTP_SSL(smtp_server)
    # QQ邮箱SMTP的端口号是465或587
    server.connect(smtp_server, 465)
    # 登录邮箱
    server.login(come_from, password)
    # 发送邮件
    server.sendmail(come_from, to_email, msg.as_string())
    print("发送完成")
    # 退出邮箱
    server.quit()



